'\" t
.TH "SD_IS_FIFO" "3" "" "systemd 249" "sd_is_fifo"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
sd_is_fifo, sd_is_socket, sd_is_socket_inet, sd_is_socket_unix, sd_is_socket_sockaddr, sd_is_mq, sd_is_special \- Check the type of a file descriptor
.SH "SYNOPSIS"
.sp
.ft B
.nf
#include <systemd/sd\-daemon\&.h>
.fi
.ft
.HP \w'int\ sd_is_fifo('u
.BI "int sd_is_fifo(int\ " "fd" ", const\ char\ *" "path" ");"
.HP \w'int\ sd_is_socket('u
.BI "int sd_is_socket(int\ " "fd" ", int\ " "family" ", int\ " "type" ", int\ " "listening" ");"
.HP \w'int\ sd_is_socket_inet('u
.BI "int sd_is_socket_inet(int\ " "fd" ", int\ " "family" ", int\ " "type" ", int\ " "listening" ", uint16_t\ " "port" ");"
.HP \w'int\ sd_is_socket_sockaddr('u
.BI "int sd_is_socket_sockaddr(int\ " "fd" ", int\ " "type" ", const\ struct\ sockaddr\ *" "addr" ", unsigned\ " "addr_len" ", int\ " "listening" ");"
.HP \w'int\ sd_is_socket_unix('u
.BI "int sd_is_socket_unix(int\ " "fd" ", int\ " "type" ", int\ " "listening" ", const\ char\ *" "path" ", size_t\ " "length" ");"
.HP \w'int\ sd_is_mq('u
.BI "int sd_is_mq(int\ " "fd" ", const\ char\ *" "path" ");"
.HP \w'int\ sd_is_special('u
.BI "int sd_is_special(int\ " "fd" ", const\ char\ *" "path" ");"
.SH "DESCRIPTION"
.PP
\fBsd_is_fifo()\fR
may be called to check whether the specified file descriptor refers to a FIFO or pipe\&. If the
\fIpath\fR
parameter is not
\fBNULL\fR, it is checked whether the FIFO is bound to the specified file system path\&.
.PP
\fBsd_is_socket()\fR
may be called to check whether the specified file descriptor refers to a socket\&. If the
\fIfamily\fR
parameter is not
\fBAF_UNSPEC\fR, it is checked whether the socket is of the specified family (\fBAF_UNIX\fR,
\fBAF_INET\fR, \&...)\&. If the
\fItype\fR
parameter is not 0, it is checked whether the socket is of the specified type (\fBSOCK_STREAM\fR,
\fBSOCK_DGRAM\fR, \&...)\&. If the
\fIlistening\fR
parameter is positive, it is checked whether the socket is in accepting mode, i\&.e\&.
\fBlisten()\fR
has been called for it\&. If
\fIlistening\fR
is 0, it is checked whether the socket is not in this mode\&. If the parameter is negative, no such check is made\&. The
\fIlistening\fR
parameter should only be used for stream sockets and should be set to a negative value otherwise\&.
.PP
\fBsd_is_socket_inet()\fR
is similar to
\fBsd_is_socket()\fR, but optionally checks the IPv4 or IPv6 port number the socket is bound to, unless
\fIport\fR
is zero\&. For this call
\fIfamily\fR
must be passed as either
\fBAF_UNSPEC\fR,
\fBAF_INET\fR, or
\fBAF_INET6\fR\&.
.PP
\fBsd_is_socket_sockaddr()\fR
is similar to
\fBsd_is_socket_inet()\fR, but checks if the socket is bound to the address specified by
\fIaddr\fR\&. The
\fIfamily\fR
specified by
\fIaddr\fR
must be either
\fBAF_INET\fR
or
\fBAF_INET6\fR
and
\fIaddr_len\fR
must be large enough for that family\&. If
\fIaddr\fR
specifies a non\-zero port, it is also checked if the socket is bound to this port\&. In addition, for IPv6, if
\fIaddr\fR
specifies non\-zero
\fIsin6_flowinfo\fR
or
\fIsin6_scope_id\fR, it is checked if the socket has the same values\&.
.PP
\fBsd_is_socket_unix()\fR
is similar to
\fBsd_is_socket()\fR
but optionally checks the
\fBAF_UNIX\fR
path the socket is bound to, unless the
\fIpath\fR
parameter is
\fBNULL\fR\&. For normal file system
\fBAF_UNIX\fR
sockets, set the
\fIlength\fR
parameter to 0\&. For Linux abstract namespace sockets, set the
\fIlength\fR
to the size of the address, including the initial 0 byte, and set the
\fIpath\fR
to the initial 0 byte of the socket address\&.
.PP
\fBsd_is_mq()\fR
may be called to check whether the specified file descriptor refers to a POSIX message queue\&. If the
\fIpath\fR
parameter is not
\fBNULL\fR, it is checked whether the message queue is bound to the specified name\&.
.PP
\fBsd_is_special()\fR
may be called to check whether the specified file descriptor refers to a special file\&. If the
\fIpath\fR
parameter is not
\fBNULL\fR, it is checked whether the file descriptor is bound to the specified filename\&. Special files in this context are character device nodes and files in
/proc/
or
/sys/\&.
.SH "RETURN VALUE"
.PP
On failure, these calls return a negative errno\-style error code\&. If the file descriptor is of the specified type and bound to the specified address, a positive return value is returned, otherwise zero\&.
.SH "NOTES"
.PP
These APIs are implemented as a shared library, which can be compiled and linked to with the
\fBlibsystemd\fR\ \&\fBpkg-config\fR(1)
file\&.
.PP
Internally, these function use a combination of
fstat()
and
getsockname()
to check the file descriptor type and where it is bound to\&.
.SH "SEE ALSO"
.PP
\fBsystemd\fR(1),
\fBsd-daemon\fR(3),
\fBsd_listen_fds\fR(3),
\fBsystemd.service\fR(5),
\fBsystemd.socket\fR(5),
\fBip\fR(7),
\fBipv6\fR(7),
\fBunix\fR(7),
\fBfifo\fR(7),
\fBmq_overview\fR(7),
\fBsocket\fR(7)\&.
